package com.shujia.mr.demo2;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/*
    通过观察源码发现，我们要设定map的输入<key,value>类型和输出的<key,value>类型
    输入的key，value类型已经被底层框架所设定好了，默认是由底层LineRecordReader行记录读取器，读取到切片中的每一行数据
    将每一行的数据封装成<key,value>类型的数据，作为map的输入。
    默认情况下，LineRecordReader行记录读取器的key是LongWritable类型，value是Text类型, value就是读取到的一行数据
    LongWritable类型-> java: long
    Text类型-> java: String
    <xxx,"hello world count hadoop">

    假设现在有一个文件：
        hello world count hadoop
        java hello count
        hadoop hive
        hello world hadoop java nihao shijie

    预设的结果：
        hello 3
        world 2
        count 2
        hadoop 3
        ...

 */
public class MyMapper extends Mapper<LongWritable, Text, LongWritable, Text> {
    //重写map方法
    //默认情况下，一行数据会执行一次map方法
    //根据实际情况结果得知，默认情况下，行记录读取器，每次读取一行将其封装成k-v格式的数据
    //其中k是每一行的开始字节数
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, LongWritable, Text>.Context context) throws IOException, InterruptedException {
        //<xxx,"hello world count hadoop">
        context.write(key,value);
    }
}
